package spring.event;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.springframework.context.ApplicationListener;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;

/**
 * Spring 事件驱动: 自定义事件的监听器, 增加事件的 handle 逻辑（需要配置为 spring Bean）
 *
 * @author ME
 */
@Component
@Async
public class HungerEventListener implements ApplicationListener<HungerEvent> {

    @Override
    public void onApplicationEvent(HungerEvent event) {
        // TODO Listener 是 Observer模式？？？

        // System.out.println(event.getSource());// 发布事件时任意自己想传递的值
        // System.out.println(event.getTimestamp());// 发布事件时的时间戳

        System.out.printf("[Event Consumer]: Thread-%s 开始响应事件。\n" +
                                "\t%s, %s hungry, let's cook~\n",
                Thread.currentThread().getName(),
                new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date(event.getTimestamp())), event.getSource());
    }
}
